[Oberon] 7MB echo of comp.lang.modula-2 from 1989 and 1993-1995 and Peter Schweri ArtworkCode 86 in Oberon

scrutinizer scruty at users.sourceforge.net
Sat Feb 6 16:07:19 CET 2021

While I searched my disk for a backup of Fidonet Modula-2 newsgroup

[ "A number of newsgroups are shared globally by FidoNet and the Usenet, e.g.
FidoNet's MODULA-2 echomail conference is Usenet's comp.lang.modula2 and ..."
   -- quote from https://www.fidonet.org/inet92_Randy_Bush.txt ]

I found 7 MB of plain ascii text echo of comp.lang.modula-2 from June-1989 and from Feb-1993 to Aug-1995.

The keyword 'Oberon' appears more than 2000 times (incuding backquotes in replies).

In case this material is no longer available elsewhere and if it is safely considered
public domain because it was once publicly available, I'd post it on a suitable webpage.


p.s.: During my search I stumbled upon more material about Oberon:

One programming example seems to be alive though the artitst already passed away:


Is it the following program?

ArtworkCode 86 or how to visualize 1296 pictures

Visualization is undoubtedly one of the most attractive application of modern computers.
In the run-up to Kicking Boxes Billiard- a current exhibition at the Graphische Sammlung of ETH Zuerich that is devoted
to contemporary geometric art- we were approached by the artist Peter Schweri with the idea of visualizing his ArtworkCode

The basic concept of ArtworkCode 86 is customizable art in the sense that each individual may select his or her specimen
from a complete collection of pictures.

In its simplest form, ArtworkCode 86 is a set of pictures consisting of 4 x 4 colored double-squares.
If (as in the examples below) two colors are used (e.g. black and white, red and green, cyan and magenta)
and if the columns are required to be balanced in color (2 double-squares
of each color), the complete set consists of 6 to the 4th = 1296 pictures.

Essentially, we developed two (trivial) Oberon programs for ArtworkCode 86, one that generates a complete catalogue
on a single page in the form of an array of 36 x 36 pictures, and one that displays form-filling any arbitrary picture
of the collection (given by its ordinal number).

In both cases, the Oberon program produces a portable PostScript(TM) file that may be fed to any PostScript printer
or photo exposure device of any size and quality.

Thanks to this technique we were able without additional effort to produce (a) a large poster-sized version of the catalogue
and (b) high-quality lithographs of some carefully selected pictures.

For the interested reader we present the Oberon program that generates the complete ArtworkCode 86 catalogue in green
on red.

Jürg Gutknecht, Institute for Computer Systems.

ArtworkCode 86 is a trademark of Peter Schweri.

MODULE ArtworkCode;

   IMPORT Files, Texts, Display, Oberon;

     CONST D = 12; H = 8; W = 2*H;
       dX = 4*W + D; dY = 4*H + D; (*in units of 0.1 mm*)

     VAR WT: Texts.Writer; col: ARRAY 6, 4 OF BOOLEAN;


   BEGIN Texts.WriteString(WT, s); Texts.WriteLn(WT)

   END WriteLn;


   BEGIN Texts.WriteInt(WT, i, 1); Texts.Write(WT, " ")

   END WriteInt;


     VAR j: INTEGER;

   BEGIN j := 0;


       IF col[i, j] THEN

         WriteInt(X); WriteInt(Y); WriteInt(W); WriteInt(H); WriteLn("rect")


       Y := Y + H; INC(j)

     UNTIL j = 4

   END PrintColumn;


     VAR j: INTEGER;


     WriteLn("1 0 1 setrgbcolor");

     WriteInt(X); WriteInt(Y); WriteInt(4*W); WriteInt(4*H); WriteLn("rect");

     WriteLn("0 1 1 setrgbcolor"); j := 0;

     WHILE j # 4 DO

       PrintColumn(N MOD 6, X, Y); N := N DIV 6; X := X + W; INC(j)


   END PrintPicture;

   PROCEDURE Print*;


       f: Files.File; RF: Files.Rider; T: Texts.Text; RT: Texts.Reader;

   BEGIN Texts.OpenWriter(WT);

     WriteLn("%!"); WriteLn("/rect {");

     WriteLn("/rh exch def"); WriteLn("/rw exch def");

     WriteLn("newpath"); WriteLn("moveto");

     WriteLn("rw 0 rlineto"); WriteLn("0 rh rlineto");

     WriteLn("rw neg 0 rlineto"); WriteLn("closepath fill");

     WriteLn("} bind def");

     WriteLn("0.2835 0.2835 scale"); (*to units of 0.1 mm*)

     WriteLn("90 rotate"); WriteLn("120 -1856 translate");

     WriteLn("/Times-Roman findfont"); WriteLn("28 scalefont");

     WriteLn("setfont"); WriteLn("0 0 0 setrgbcolor");

     WriteLn("0 0 moveto"); WriteLn("(Artwork Code 86 by Peter Schweri) show");

     WriteLn("0 -30 moveto"); WriteLn("(Copyright (C) Peter Schweri) show");

     WriteLn("180 rotate");

     N := 0; X := -4*W; Y := -1622;


       PrintPicture(N, X, Y); INC(N); Y := Y +dY;

       IF N MOD 36 = 0 THEN X := X - dX; Y := -1622 END

     UNTIL N = 1296;


     NEW(T); Texts.Open(T, ""); Texts.Append(T, WT.buf);

     f := Files.New("Artwork.PS"); Files.Set(RF, f, 0);

     Texts.OpenReader(RT, T, 0); Texts.Read(RT, ch);

     WHILE ~ RT.eot DO Files.Write(RF, ch); Texts.Read(RT, ch) END;


   END Print;


   col[0, 0] := TRUE; col[0, 1] := TRUE; col[0, 2] := FALSE; col[0, 3] := FALSE;

   col[1, 0] := TRUE; col[1, 1] := FALSE; col[1, 2] := TRUE; col[1, 3] := FALSE;

   col[2, 0] := FALSE; col[2, 1] := TRUE; col[2, 2] := TRUE; col[2, 3] := FALSE;

   col[3, 0] := TRUE; col[3, 1] := FALSE; col[3, 2] := FALSE; col[3, 3] := TRUE;

   col[4, 0] := FALSE; col[4, 1] := TRUE; col[4, 2] := FALSE; col[4, 3] := TRUE;

   col[5, 0] := FALSE; col[5, 1] := FALSE; col[5, 2] := TRUE; col[5, 3] := TRUE

END ArtworkCode.

More information about the Oberon mailing list