Peter Struycken

Computer programs - OSTRC - Details

The program OSTRC is the first program that Peter Struycken used to create art works. The program was written in Algol 60 by Drs Stan Tempelaars while working at the Institute of Sonology. The program can be found in the exhibition catalogue P. Struycken komputerstrukturen. ('Komputerstrukturen' is Dutch for computer structures). A transcript of the program is:

 0
 1  BEGIN COMMENT INSTITUUT VOOR SONOLGOIE
 2                PLOMPETORENGRACHT 14,UTRECHT
 3                VISUELE STRUKTUREN 3;
 4            INTEGER I,K,N,P,BR,H,R,S,Y,NR,REGEL,L,BRMAX;
 5            REAL START;
 6            BOOLEAN C;
 7            INTEGER ARRAY X/1:100/;
 8            BOOLEAN ARRAY BETA/0:40,1:4/;
 9            SWITCH SWM:= MAIN1,MAIN2,M3,M4,M5,M6,M7,M8,MAIN9;
10            FOR K:= 0 STEP 1 UNTIL 10,15 STEP 1 UNTIL 20,27 STEP 1 UNTIL 30,35 STEP 1 UNTIL 39
11            DO FOR N:= 1,2,3,4 DO BETA/K,N/:= FALSE;
12            BETA/11,1/:= TRUE: BETA/11,2/:= BETA/11,3/:= BETA/11,4/:= FALSE;
13            BETA/21,1/:= BETA/21,2/:= TRUE: BETA/21,3/:= BETA/21,4/:= FALSE;
14            BETA/31,1/:= BETA/31,2/:= BETA/31,3/:= TRUE; BETA/31,4/:= FALSE;
15            FOR K:= 11,12,13,21,22,23,31,32,33 DO
16            FOR N:= 1,2,3,4 DO BETA/K+1,IF N=4 THEN 1 ELSE N+1/:= BETA/K,N/;
17            BETA/25,1/:= BETA/25,3/:= TRUE; BETA/25,2/:= BETA/25,4/:= FALSE;
18            BETA/26,2/:= BETA/26,4/:= TRUE; BETA/26,1/:= BETA/26,3/:= FALSE;
19            FOR N:= 1,2,3,4 DO BETA/40,N/:= TRUE;
20    MAIN0:  M3:M4:M5:M6:M7:M8:
21            Y:= READ; IF Y>2^Y<9 THEN GOTO BB ELSE GOTO SWM/Y/;
22    MAIN1:  NEW PAGE;
23            PRINTTEXT(<INSTITUUT VOOR SONOLOGIE>);NLCR;
24            PRINTTEXT(<PLOMPETORENGRACHT 14-16, UTRECHT>);NLCR;
25            PRINTTEXT(<VISUELE STRUKTUREN 3>);NLCR;NLCR;NLCR;
26            PRINTTEXT(<COMMENT :>);
27    AA:     Y:= RESYM; IF Y=87 THEN BEGIN NLCR;NLCR; GOTO MAINNO END
28            PRSYM(Y); GOTO AA;
29        
30    MAIN2:  L:= READ; BRMAX:= READ; C:= TRUE; GOTO EE;
31    BB:     C:= FALSE;
32    EE:     BEGIN   BOOLEAN ARRAY B/0:2*L+1,0:2*BRMAX+1/;
33                    SWITCH SWSM:= M1,M2,MAIN3,MAIN4,MAIN5,MAIN6,MAIN7,MAIN8;
34                    REGEL:= 0;
35                    FOR K:= 0 STEP 1 UNTIL 2*BRMAX+1 DO B/0,K/:= B/2*L+1,K/:=FALSE;
36                    FOR K:= 0 STEP 1 UNTIL 2*L+1 DO B/K,0/:= B/K,2*BRMAX+1/:=FALSE;
37            MAIN20: M1:M2:  IF C THEN Y:= READ ELSE C:= TRUE; GOTO SWSM/Y/ ;
38            MAIN3:  START:= READ; SETRANDOM(START); GOTO MAIN20;
39            MAIN4:  BR:= READ; GOTO MAIN20;
40            MAIN5:  H:= READ; GOTO MAIN20;
41            MAIN6:  I:= READ;
42                    FOR K:= 1 STEP 1 UNTIL I DO X/K/:= READ; GOTO MAIN20;
43            MAIN7:  P:= 0;
44            CC:     R:= ENTIER(I*RANDOM+1);
45                    P:= P+1; S:= ENTIER((P-1)/BR);
46                    IF S=H THEN BEGIN REGEL:= REGEL+S; GOTO DD END;
47                    B/2*(REGELS+S)+1,2*(P-BR*S)-1/:= BETA/X/R/,1/: B/2*(REGELS+S)+1,2*(P-BR*S)/:= BETA/X/R/,2/;
48                    B/2*(REGELS+S)+2,2*(P-BR*S)/: = BETA/X/R/,3/; B/2*(REGELS+S)+2,2*(P-BR*S)-1/:= BETA/X/R/,4/;
49                    GOTO CC;
50            DD:     FOR K:= 2*(REGEL-H)+1 STEP 1 UNTIL 2*REGEL DO
51                            FOR N:= 2*BR+1 STEP 1 UNTIL 2*BRMAX DO B/K,N/:= FALSE;
52                    GOTO MAIN20;
53            MAIN8:  NLCR;NLCR;NLCR; NR:= 0';
54                    FOR I:= 0 STEP 1 UNTIL 2*L DO
55                    BEGIN NLCR; NR:= NR+1; ABSFIXT(4,0,NR); SPACE(4);
56                          FOR K:= 1 STEP 1 UNTIL 2*BRMAX+1 DO
57                          BEGIN     IF (B/I,K/^-B/I,K-1/)^(-B/I,K/^B/I,K-1/)
58                                    THEN BEGIN PRSYM(12/);PRSYM(93)END  ELSE PRSYM(93);
59                                    IF (B/I+1,K/^-B/I,K)v(-B/I+1,K/^B/I,K)
60                                    THEN BEGIN PRSYM(126); IF B/I,K/ THEN PRSYM(66) ELSE PRSYM(93) END
61                                    ELSE IF B/I,K/ THEN PRSYM(66) ELSE PRSYM (93)
62                          END
63                    END
64            END;
65            GOTO MAIN0;
66  MAIN9:
67  END
68

From analyzing the program, one can find out that that the program reacts on commands it reads from the input. (The program was developed in a time when compiling a program was still expensive compared to executing the program. It was in a time that RAM usage was charged in Kilo bytes by the second.) Each command starts with a number from 1 to 9 (including) and is optionally followed by some arguments. The commands are (with their function described behind the dash):

The program has been reimplemented in JavaScript and included in this page. Because information about the pseudo-random generator used by this version of Algol60, could not be found, the standard random generator of JavaScript is used. This random generator does not allow you to set the random see. So, the input from the random-seed command is ignored. This also means that the output will be different everytime the program is executed, resulting in another output that Struycken could have selected for his work.

Input:

Output generated by program:


Below a black and white image of the output, rotated 90 degrees counter-clockwise, like Struycken used it in his painting.

This text is displayed if your browser does not support HTML5 Canvas.

Example input for Komputerstrukturen 1 (based on analyses of work):
1 1
2 50 50
3 4545
4 25
5 4
6 5  0  0 11 11 21
7
5 1
6 9  0  0  0 11 11 21 21 21 21
7
5 3
6 5  0 11 11 21 21
7
5 1
6 2 11 21
7
6 12 11 11 11 11 11 21 21 21 21 21 31 34
7
5 3
6 9 11 11 11 21 21 21 21 31 31
7
5 4
6 5 11 21 21 31 31
7
5 2
6 2 21 31
7
5 3
6 8 21 21 21 31 31 31 40 40
7
5 2
6 6 21 31 31 31 40 40
5 1
6 2 31 40
7
8
9
Example input for Komputerstrukturen 1A (based on analyses of work):
1 1A
2 50 50
3 4545
4 25
5 4
6 5  0  0 11 11 21
7
6 9  0  0 11 11 11 21 21 21 21
7
5 6
6 9 11 11 11 11 21 21 21 21 31
7
5 5
6 7 11 21 21 21 31 31 31
7
5 3
6 6 21 21 21 31 31 40
7
6 8 21 31 31 31 31 40 40 40
7
8
9
or:
1 1A
2 50 50
3 4545
4 25
5 4
6 19  0  0  0  0  0  0  0  0 11 11 11 11 11 11 11 21 21 21 21
7
5 4
6 14  0  0  0 11 11 11 11 11 21 21 21 21 21 21
7
5 6
6 9 11 11 11 11 21 21 21 21 31
7
5 5
6 15 11 11 21 21 21 21 21 21 31 31 31 31 31 31 31
7
5 3
6 16 21 21 21 21 21 21 21 21 31 31 31 31 31 40 40 40
7
5 3
6 17 21 21 31 31 31 31 31 31 31 31 40 40 40 40 40 40 40
7
8
9
At first sight, one would guess that both Komputerstrukturen 2 and Komputerstrukturen 2A are generated with:
1 2
2 50 50
3 4545
4 25
5 25
6 4 11 12 13 14
7
8
9
But closer analyses of the works, suggest something different. Note that Komputerstrukturen 2 contains one element 23. (It is unknown, whether this was on purpose or due to a copy error.) Example input for Komputerstrukturen 2A (based on analyses of work):
1 2
2 50 50
3 4545
4 25
5 5
6 9 11 12 13 13 14 14 14 14 14
7
5 5
6 6 11 11 12 13 14 14
7
6 8 11 11 11 11 12 12 13 14
7
5 1
6 8 11 11 12 12 12 13 13 14
7
6 13 11 11 12 12 12 12 12 13 13 13 14 14 23
7
5 3
6 8 11 11 12 12 12 13 13 14
7
5 5
6 9 11 12 12 13 13 13 13 14 14
7
8
9
Example input for Komputerstrukturen 2A (based on analyses of work):
1 2A
2 50 50
3 4545
4 25
5 5
6 9 11 12 13 13 14 14 14 14 14
7
6 6 11 11 12 13 14 14
7
6 8 11 11 11 11 12 12 13 14
7
6 18 11 11 11 11 11 12 12 12 12 12 12 12 13 13 13 13 14 14
7
6 7 11 12 13 13 13 14 14
7
8
9
Example input for Komputerstrukturen 3 (based on analyses of work):
1 3
2 50 50
3 4545
4 25
5 5
6 6 23 24 24 26 26 26
7
6 4 23 24 24 26
7
6 7 23 23 23 23 24 24 26
7
6 9 23 23 23 23 24 24 26 26 26
7
5 3
6 7 23 24 24 26 26 26 26
7
5 1
6 13 23 23 23 24 24 24 26 26 26 26 26 32 34
7
6 10 23 24 24 24 26 26 26 26 26 26
7
8
9
Example input for Komputerstrukturen 3A (based on analyses of work):
1 3A
2 50 50
3 4545
4 25
5 1
6 11 14 23 24 24 24 24 26 26 26 26 26
7
5 4
6 7 23 24 24 26 26 26 26
7
5 5
6 7 23 23 24 24 24 26 26
7
6 6 23 23 23 24 24 26
7
6 6 23 23 23 24 24 26
7
5 3
6 4 23 24 26 26
7
5 1
6 13 23 23 23 23 24 24 24 24 26 26 26 26 34
7
6 9 23 24 24 24 26 26 26 26 26
7
8
9
Example input for Komputerstrukturen 4 based on table given on page 8 of P. Struycken from 1976:
1 4
2 50 50
3 4545
4 25
5 5
6 12 11 12 12 12 12 12 12 12 12 14 31 34
7
6 12 11 11 12 12 12 12 12 14 31 31 34 34
7
6 12 11 12 14 14 31 31 31 31 34 34 34 34
7
6 14 11 14 21 24 31 31 31 31 31 34 34 34 34 34
7
6 13 14 21 21 21 24 24 24 31 31 31 34 34 34
7
8
9
Example input based on item AB15702:
1 4
2 50 50
3 4545
4 25
5 5
6 18 14 14 11 11 12 12 12 12 12 12 12 12 12 12 12 12 34 31
7
6 22 14 14 11 11 11 11 12 12 12 12 12 12 12 12 34 34 34 34 31 31 31 31
7
6 24 14 14 14 14 11 11 12 12 34 34 34 34 34 34 34 34 31 31 31 31 31 31 31 31
7
6 20 14 11 24 21 34 34 34 34 34 34 34 34 31 31 31 31 31 31 31 31
7
6 17 14 21 24 24 24 21 21 21 21 34 34 34 34 31 31 31 31
7
8
9
Example input for Komputerstrukturen 4A based on table given on page 8 and 63 of P. Struycken from 1976:
1 4A
2 50 50
3 4545
4 25
5 5
6 13 11 11 11 11 11 11 11 11 14 14 13 33 34
7
6 13 11 11 11 11 13 13 14 14 33 33 34 34 34
7
6 12 11 11 13 13 14 33 33 33 34 34 34 34
7
6 14 14 24 23 33 33 33 33 33 33 34 34 34 34 34
7
6 13 13 23 23 23 24 24 24 33 33 33 34 34 34
7
8
9
But this input does not match the the reproduction of the computer print-out that can be found on page 63 of Struycken from 1976 and that matches the work. It seems that the ninth column (of two by two squares) was generated with a different rule, maybe to soften the transition with the next set of five columns. The input might have looked like:
1 4A
2 50 50
3 4545
4 25
5 5
6 13 11 11 11 11 11 11 11 11 14 14 13 33 34
7
6 13 11 11 11 11 13 13 14 14 33 33 34 34 34
7
6 12 11 11 13 13 14 33 33 33 34 34 34 34
7
5 1
6 14 13 14 23 33 33 33 33 33 33 33 34 34 34 34
7
5 4
6 14 14 24 23 33 33 33 33 33 33 34 34 34 34 34
7
5 5
6 13 13 23 23 23 24 24 24 33 33 33 34 34 34
7
8
9


Home page