No previous Up Next

Peter Struycken - OSTRC

This page is about the first program, named OSTRC, 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 (Dutch for computer structure). 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, I have discovered that the program reacts on commands it reads from the input. This was 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): I have reimplemented the program in JavaScript and included in this page. The command to set the random seed is ignored. Because I could not discover the pseudo-random generator used by this version of Algol60, I decided to use the standard random generator of JavaScript which does not allow you to set the random seed. 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
6 5  0 11 11 21 21
7
5 5
6 7 11 11 11 21 21 21 31
7
5 4
6 5 11 21 21 31 31
7
5 3
6 4 21 21 31 31
7
5 2
6 3 21 31 40
7
5 3
6 10 21 31 31 31 31 31 40 40 40 40
7
8
9
or
1 1
2 50 50
3 4545
4 25
5 4
6 16  0  0  0  0  0  0  0 11 11 11 11 11 11 21 21 21
7
5 4
6 19  0  0  0  0 11 11 11 11 11 11 11 21 21 21 21 21 21 21 21
7
5 4
6 9 11 11 11 11 21 21 21 21 31
7
5 5
6 13 11 11 11 21 21 21 21 21 31 31 31 31 31
7
5 3
6 19 21 21 21 21 21 21 21 21 21 31 31 31 31 31 31 31 31 31 40
7
5 5
6 16 21 21 21 31 31 31 31 31 31 31 40 40 40 40 40 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
It is quite possible that both Komputerstrukturen 2 and Komputerstrukturen 2A are generated with:
1 1A
2 50 50
3 4545
4 25
5 25
6 4 11 12 13 14
7
8
9
Example input for Komputerstrukturen 2A (based on analyses of work):
1 1A
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
5 5
6 8 11 11 11 11 12 12 13 14
7
5 5
6 18 11 11 11 11 11 12 12 12 12 12 12 12 13 13 13 13 14 14
7
5 5
6 7 11 12 13 13 13 14 14
7
8
9
Example input for Komputerstrukturen 3A (based on analyses of work):
1 1A
2 50 50
3 4545
4 25
5 25
6 3 22 23 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 is definitely not the input that was being used (more). It 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 | Email address