Het programma OSTRC is het eerste programma
dat Peter Struycken gebruikt voor het maken van zijn
kunstwerken. Het programma is geschreven in Algol 60 door Drs Stan Tempelaars
terwijl hij werkte bij Het Instituut voor Sonologie. Het programma is
gepubliceerd in de tentoonstellings catalogus P. Struycken komputerstrukturen. Een transcriptie van het programma
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
Door het programma te analyser, kan men zien dat het commando's van de invoer
verwerkt. (Het programma is ontwikkeld in een tijd dat het compileren van een
programma vaak veel duurder was dan de uitvoering er van. In die tijd werd
geheugengebruik nog berekend in Kilo bytes per seconde.) Ieder commando begint
met een getal van 1 tot en met 9 en wordt (optioneel) gevolgd door een aantal
argumenten.
De commando's (met een beschrijving van hun betekenis) zijn:
- 1 commentaar - de rest van de regel wordt geprint in de uitvoer file.
- 2 aantal-regels aantal-kolommen - definieerd de grote van het te
genereren patroon.
- 3 random-seed - getal waarmee de random-generator geïnitialiseerd
wordt.
- 4 te-vullen-kolommen - defineerd het aantal kolommen dat gevuld
moet worden bij het 'vul' commando.
- 5 te-vullen-lijnen - defineerd het aantal lijnen dat gevuld moet
worden bij het 'vul' commando.
filled by fill command.
- 6 n x1 ... xn - definieerd de specifieke
patronen die gebruikt moeten worden in het te vullen gebied. n kan
niet groter dan 100 zijn. De kans waarop een patroon gebruikt moet worden,
wordt bepaald door hoevaak het herhaald wordt. Geldige waarden voor
patronen zijn: 0, 11, 12, 13, 14, 21, 22, 23, 24, 25, 26, 31, 32, 33, 34
en 40.
- 7 - het 'vul' commando dat het gespecificeerde gebied vult met volgens het
gespecificeerde patroon.
- 8 - druk het gegeneerde patroon af in het uitvoer bestand.
- 9 - beëindig de uitvoering van het programma.
Het programma is opnieuw geïmplementeerd in JavaScript en opgenomen in
deze pagina. Omdat informatie over de werking van de random-generator van de
gebruikte versie van Algol 60 niet achterhaald kon worden, wordt de ingebouwde
random generator van JavaScript gebruikt. Het is niet mogelijk om deze
random-generator te initialiseren met een 'seed'. Derhalve wordt het 'seed'
command genegeerd. Dit betekend dat elke keer wanneer het programma uitgevoerd
wordt, een nieuwe werk wordt geproduceerd dat Struycken gebruikt had kunnen
voor zijn werken.
De door het programma gegenereerd uitvoer:
Hieronder volgt het zwart-wit patroon dat gebaseerd is op de uitvoer, voor
90 graden tegen de klok gedraait, zoals Struycken dit voor zijn werken.
Voorbeeld invoer voor Komputerstrukturen 1
(gebaseerd op analyse van het werk):
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
|
Voorbeeld invoer voor Komputerstrukturen 1A
(gebaseerd op analyse van het werk):
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
|
of:
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
|
Op het eerste gezicht zou je denken dat zowel Komputerstrukturen 2 als Komputerstrukturen 2A
gegenereerde zijn met de invoer:
1 2
2 50 50
3 4545
4 25
5 25
6 4 11 12 13 14
7
8
9
|
Maar nadere analyse van de werken, weest iets anders uit. Merk op dat
Komputerstrukturen 2 één maal
het patroon23 bevat. (Het is onbekend of dit opzettelijk is het gevolg van
een kopiëerfout.)
Voorbeeld invoer voor Komputerstrukturen 2A (gebaseerd op analyse van het werk):
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
|
Voorbeeld invoer voor Komputerstrukturen 2A
(gebaseerd op analyse van het werk):
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
|
Voorbeeld invoer voor Komputerstrukturen 3
(gebaseerd op analyse van het werk):
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
|
Voorbeeld invoer voor Komputerstrukturen 3A
(gebaseerd op analyse van het werk):
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
|
Voorbeeld invoer voor Komputerstrukturen 4
gebaseerd op de tabel die staat op pagina 8 van P. Struycken uit 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
|
Voorbeeld invoer gebaseerd op
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
|
Voorbeeld invoer voor Komputerstrukturen 4A
gebaseerd op de tabel op de pagina's 8 en 63 van P. Struycken uit 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
|
Deze invoer komt echter niet overeen met de reproductie van het werk dat op
pagina 63 wordt gevonden in Struycken uit
1976 en dat ook overeenkomt met het uitgevoerde werk. Het ziet er naar uit
dat voor de negende kolom (van twee bij twee vierkantjes) een verschillende
regel gebruikt is, mogelijk om de overgang met de volgende vijf kolommen iets
minder abrupt te maken. Een voorbeeld van de aangepaste invoer die mogelijk
gebruikt kan zijn geworden, is:
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
|
Thuis pagina