<div dir="ltr">THen perhaps the character coding is something totally foreign. Only the tool file reads in emacs.<div><br></div><div>Jan.</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jul 25, 2017 at 3:07 PM, Dieter <span dir="ltr"><<a href="mailto:d.gloetzel@web.de" target="_blank">d.gloetzel@web.de</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div bgcolor="#FFFFFF" text="#000000">
<div class="m_3966822859819969747moz-cite-prefix">The source code and docu is in the
attachment of my last mail.<br>
<br>
Regards, Dieter<div><div class="h5"><br>
<br>
Am 25.07.2017 um 14:18 schrieb Jan de Kruyf:<br>
</div></div></div><div><div class="h5">
<blockquote type="cite">
<div dir="ltr">Would you have the source code for the *.Mod files
Dieter?
<div><br>
</div>
<div>Jan.</div>
<div><br>
</div>
</div>
<div class="gmail_extra"><br>
<div class="gmail_quote">On Tue, Jul 25, 2017 at 10:00 AM,
Dieter <span dir="ltr"><<a href="mailto:d.gloetzel@web.de" target="_blank">d.gloetzel@web.de</a>></span>
wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div bgcolor="#FFFFFF" text="#000000">
<div class="m_3966822859819969747m_9183498231220295030moz-cite-prefix">Just to
remind you, that there exists a nice prettyprinter
written by G. Feldmann, running on ETHOberon Windows
plugin.<br>
Regards,<br>
Dieter
<div>
<div class="m_3966822859819969747h5"><br>
<br>
Am 25.07.2017 um 01:44 schrieb Hans Klaver:<br>
</div>
</div>
</div>
<blockquote type="cite">
<div>
<div class="m_3966822859819969747h5"> Jörg wrote:
<div><br>
<div>
<blockquote type="cite">
<div><span style="font-family:Menlo-Regular;font-size:13px;font-style:normal;font-variant-caps:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;float:none;display:inline!important">Indentation
is indeed a totally personal thing.</span><br style="font-family:Menlo-Regular;font-size:13px;font-style:normal;font-variant-caps:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px">
</div>
</blockquote>
<br>
</div>
<div>It is interesting to catalogue the different
indentation styles used by some well known (and
less well known) programmers of Oberon and
Component Pascal source code. With one of the
exercises of the Reiser & Wirth book as
material I wrote out various indentation
styles.
<div><br>
</div>
<div>Crudely four styles of indentation can be
discerned:</div>
<div>- No indentation (Daniel)</div>
<div>- Minimal indentation (Reiser /
Mössenböck); the difference between the two is
in the indentation of declarations (e.g. VAR)
at the procedure level</div>
<div>- Classical indentation (Wirth &
Gutknecht); has the most consistent
indentation of scope levels.</div>
<div>- Knuth indentation (Knuth / Campbell);
also quite consistent, but rather convoluted.<br>
<div><br>
</div>
<div><br>
</div>
<div>
<div>MODULE M; (* After Exercise 6.4 (p.
85) from Reiser & Wirth, Programming
in Oberon *)</div>
<div>IMPORT Out;</div>
<div>VAR i, j: INTEGER;</div>
<div>PROCEDURE A*;</div>
<div>VAR i: INTEGER;</div>
<div>PROCEDURE B(VAR i, j: INTEGER);</div>
<div>VAR k: INTEGER;</div>
<div>BEGIN k := i; i := j; j := k END B;</div>
<div>BEGIN i := 2; B(i, j)</div>
<div>END A;</div>
<div>PROCEDURE C*;</div>
<div>BEGIN A; i := 2*j; </div>
<div>Out.Int(i, 5); Out.Int(j, 5); Out.Ln</div>
<div>END C;</div>
<div>BEGIN</div>
<div>END M.C</div>
<div><br>
</div>
<div>(*****************************<wbr>*********)</div>
<div><br>
</div>
<div>MODULE M; (* Daniel, <a href="http://www.waltzballs.org/other/prog.html#track" target="_blank">http://www.waltzballs.org/othe<wbr>r/prog.html#track</a> *)</div>
<div>IMPORT Out;</div>
<div>VAR i,j:INTEGER;</div>
<div><br>
</div>
<div>PROCEDURE A*;</div>
<div>VAR i:INTEGER;</div>
<div><br>
</div>
<div>PROCEDURE B(VAR i,j:INTEGER);</div>
<div>VAR k:INTEGER;</div>
<div>BEGIN k:=i;i:=j;j:=kEND B;</div>
<div><br>
</div>
<div>BEGIN i:=2;B(i,j)</div>
<div>END A;</div>
<div><br>
</div>
<div>PROCEDURE C*;</div>
<div>BEGIN A;i:=2*j; </div>
<div>Out.Int(i,5);Out.Int(j,5);Out.<wbr>Ln</div>
<div>END C;</div>
<div><br>
</div>
<div>BEGIN</div>
<div>END M.C</div>
<div><br>
</div>
<div>(*****************************<wbr>*********)</div>
<div><br>
</div>
<div>MODULE M; (* M. Reiser, The Oberon
System </div>
<div> and M. Reiser & N. Wirth,
Programming in Oberon *)</div>
<div>IMPORT Out;</div>
<div>VAR i, j: INTEGER; </div>
<div><br>
</div>
<div>PROCEDURE A*;</div>
<div>VAR i: INTEGER;</div>
<div><br>
</div>
<div> PROCEDURE B(VAR i, j: INTEGER);</div>
<div> VAR k: INTEGER;</div>
<div> BEGIN </div>
<div> k := i; i := j; j := k </div>
<div> END B;</div>
<div><br>
</div>
<div>BEGIN </div>
<div> i := 2; B(i, j)</div>
<div>END A;</div>
<div><br>
</div>
<div>PROCEDURE C*;</div>
<div>BEGIN </div>
<div> A; i := 2*j; </div>
<div> Out.Int(i, 5); Out.Int(j, 5);
Out.Ln</div>
<div>END C;</div>
<div><br>
</div>
<div>BEGIN</div>
<div>END M.C</div>
<div><br>
</div>
<div>(*****************************<wbr>********)</div>
<div><br>
</div>
<div>MODULE M; (* H. Mössenböck, Object
Oriented Programming in Oberon-2 *)</div>
<div>IMPORT Out;</div>
<div>VAR i, j: INTEGER;</div>
<div><br>
</div>
<div>PROCEDURE A*;</div>
<div> VAR i: INTEGER;</div>
<div><br>
</div>
<div> PROCEDURE B(VAR i, j: INTEGER);</div>
<div> VAR k: INTEGER;</div>
<div> BEGIN </div>
<div> k := i; i := j; j := k </div>
<div> END B;</div>
<div><br>
</div>
<div>BEGIN </div>
<div> i := 2; B(i, j)</div>
<div>END A;</div>
<div><br>
</div>
<div>PROCEDURE C*;</div>
<div>BEGIN </div>
<div> A; i := 2*j; </div>
<div> Out.Int(i, 5); Out.Int(j, 5);
Out.Ln</div>
<div>END C;</div>
<div><br>
</div>
<div>BEGIN</div>
<div>END M.C</div>
<div><br>
</div>
<div>(*****************************<wbr>*********)</div>
<div><br>
</div>
<div>MODULE M; (* Wirth & Gutknecht,
Project Oberon *)</div>
<div> IMPORT Out;</div>
<div> VAR i, j: INTEGER;</div>
<div><br>
</div>
<div> PROCEDURE A*;</div>
<div> VAR i: INTEGER;</div>
<div><br>
</div>
<div> PROCEDURE B(VAR i, j: INTEGER);</div>
<div> VAR k: INTEGER;</div>
<div> BEGIN </div>
<div> k := i; i := j; j := k </div>
<div> END B;</div>
<div><br>
</div>
<div> BEGIN </div>
<div> i := 2; B(i, j)</div>
<div> END A;</div>
<div><br>
</div>
<div> PROCEDURE C*;</div>
<div> BEGIN </div>
<div> A; i := 2*j; </div>
<div> Out.Int(i, 5); Out.Int(j, 5);
Out.Ln</div>
<div> END C;</div>
<div><br>
</div>
<div>BEGIN</div>
<div>END M.C</div>
<div><br>
</div>
<div>(*****************************<wbr>*********)</div>
<div><br>
</div>
<div>MODULE M; (* Knuth. E.g. see: <a href="http://brokestream.com/tex.pdf" target="_blank">http://brokestream.com/tex.pdf</a><wbr> *)</div>
<div> IMPORT Out;</div>
<div> VAR i, j: INTEGER;</div>
<div><br>
</div>
<div> PROCEDURE A*;</div>
<div> VAR i: INTEGER;</div>
<div><br>
</div>
<div> PROCEDURE B(VAR i, j: INTEGER);</div>
<div> VAR k: INTEGER;</div>
<div> BEGIN k := i; i := j; j :=
k </div>
<div> END B;</div>
<div><br>
</div>
<div> BEGIN i := 2; B(i, j)</div>
<div> END A;</div>
<div><br>
</div>
<div> PROCEDURE C*;</div>
<div> BEGIN A; i := 2*j; </div>
<div> Out.Int(i, 5); Out.Int(j, 5);
Out.Ln</div>
<div> END C;</div>
<div><br>
</div>
<div> BEGIN</div>
<div> END M.C</div>
<div><br>
</div>
<div>(*****************************<wbr>*********)</div>
<div><br>
</div>
<div>
<div>MODULE M; (* R. Campbell, Subsystem
Lib for BlackBox Component Framework, </div>
<div> see the Component Pascal
Collection, <a href="http://www.zinnamturm.eu/" target="_blank">http://www.zinnamturm.eu/</a> *)</div>
<div>IMPORT Out;</div>
<div>VAR </div>
<div> i, j : INTEGER;</div>
<div><br>
</div>
<div>PROCEDURE A*;</div>
<div> VAR </div>
<div> i : INTEGER;</div>
<div><br>
</div>
<div> PROCEDURE B(VAR i, j : INTEGER);</div>
<div> VAR </div>
<div> k : INTEGER;</div>
<div> BEGIN </div>
<div> k := i; i := j; j := k </div>
<div> END B;</div>
<div><br>
</div>
<div> BEGIN </div>
<div> i := 2; </div>
<div> B(i, j)</div>
<div> END A;</div>
<div><br>
</div>
<div>PROCEDURE C*;</div>
<div> BEGIN </div>
<div> A; </div>
<div> i := 2*j; </div>
<div> Out.Int(i, 5); Out.Int(j,
5); Out.Ln</div>
<div> END C;</div>
<div><br>
</div>
<div>BEGIN</div>
<div>END M.C</div>
<div><br>
</div>
<div><br>
</div>
<div>Anyone can choose his or her
favourite indentation style.</div>
<div><br>
</div>
<div>I personally don't like the two
extremes (Daniel and Knuth / Campbell).
Imho they don't follow Einstein's
criterium "Make it as simple as ...":
Daniel's is too simplistic and Knuth's /
Campbell's are too convoluted.</div>
<div><br>
</div>
<div>The classic Wirth / Gutknecht style
is the only style that is completely
consistent: every scope has its own
indentation.</div>
<div>BlackBox uses this style as standard.
See: <a href="https://hansklav.home.xs4all.nl/ProgrammingConventionsBB.pdf" target="_blank">https://hansklav.home.xs4<wbr>all.nl/ProgrammingConventionsB<wbr>B.pdf</a></div>
<div><br>
</div>
<div>Some might find the Reiser /
Mössenböck styles more aesthetically
pleasing because of their simplicity.
Although these styles are not as
consistent as the Wirth / Gutknecht
style, in practice this doesn't matter
much because there is only one module
scope per compilation unit, and nested
procedures are rarely used in Oberon
programs.</div>
<div><br>
</div>
<div>The latter styles are used in two
excellent books: <i>The Oberon System</i> by
Martin Reiser and <i>Object-Oriented
Programming in Oberon-2</i> by
Hanspeter Mössenböck. These books are
the two best typeset Oberon books there
are (imho). Unfortunately both have long
been out of print. A scanned copy of <i>The
Oberon System</i> can be found on the
internet here: <a href="http://oberoncore.ru/library/reiser_the_oberon_system_user_guide_and_programmers_manual" target="_blank">http://oberoncore.ru/lib<wbr>rary/reiser_the_oberon_system_<wbr>user_guide_and_programmers_<wbr>manual</a> ,
and there's a pdf-version of <i>OOP in
Oberon-2</i> here: <a href="http://ssw.jku.at/Research/Books/Oberon2.pdf" target="_blank">http://ssw.jku.<wbr>at/Research/Books/Oberon2.pdf</a> <wbr>.
In this pdf the source code indentation
is not rendered entirely accurately, so
also have look at a scanned version of
this book: <a href="https://books.google.nl/books?id=BseoCAAAQBAJ&printsec=frontcover&dq=object+oriented+programming+in+oberon-2&hl=nl&sa=X&redir_esc=y#v=onepage&q=object%20oriented%20programming%20in%20oberon-2&f=false" target="_blank">https://books.google.nl/<wbr>books?id=BseoCAAAQBAJ&printsec<wbr>=frontcover&dq=object+oriented<wbr>+programming+in+oberon-2&hl=<wbr>nl&sa=X&redir_esc=y#v=onepage&<wbr>q=object%20oriented%<wbr>20programming%20in%20oberon-2&<wbr>f=false</a></div>
<div><br>
</div>
<div>--</div>
<div>Hans Klaver</div>
<div><br>
</div>
<div><br>
</div>
<div><br>
</div>
</div>
<div><br>
</div>
</div>
</div>
</div>
<br>
</div>
<br>
<fieldset class="m_3966822859819969747m_9183498231220295030mimeAttachmentHeader"></fieldset>
<br>
</div>
</div>
<span>
<pre>--
<a class="m_3966822859819969747m_9183498231220295030moz-txt-link-abbreviated" href="mailto:Oberon@lists.inf.ethz.ch" target="_blank">Oberon@lists.inf.ethz.ch</a> mailing list for ETH Oberon and related systems
<a class="m_3966822859819969747m_9183498231220295030moz-txt-link-freetext" href="https://lists.inf.ethz.ch/mailman/listinfo/oberon" target="_blank">https://lists.inf.ethz.ch/mail<wbr>man/listinfo/oberon</a>
</pre>
</span></blockquote><span class="m_3966822859819969747HOEnZb"><font color="#888888">
<p>
</p>
<pre class="m_3966822859819969747m_9183498231220295030moz-signature" cols="72">--
______________________________<wbr>______
Dr. Dieter Glötzel
Im Rosengarten 27
64367 Mühltal
Tel.: 06151 / 360 82 72</pre>
</font></span></div>
--
<a href="mailto:Oberon@lists.inf.ethz.ch" target="_blank">Oberon@lists.inf.ethz.ch</a> mailing list for ETH Oberon and related systems
<a href="https://lists.inf.ethz.ch/mailman/listinfo/oberon" rel="noreferrer" target="_blank">https://lists.inf.ethz.ch/mail<wbr>man/listinfo/oberon</a>
</blockquote></div>
</div>
<fieldset class="m_3966822859819969747mimeAttachmentHeader"></fieldset>
<pre>--
<a class="m_3966822859819969747moz-txt-link-abbreviated" href="mailto:Oberon@lists.inf.ethz.ch" target="_blank">Oberon@lists.inf.ethz.ch</a> mailing list for ETH Oberon and related systems
<a class="m_3966822859819969747moz-txt-link-freetext" href="https://lists.inf.ethz.ch/mailman/listinfo/oberon" target="_blank">https://lists.inf.ethz.ch/<wbr>mailman/listinfo/oberon</a>
</pre>
</blockquote>
<p>
</p><pre class="m_3966822859819969747moz-signature" cols="72">--
______________________________<wbr>______
Dr. Dieter Glötzel
Im Rosengarten 27
64367 Mühltal
Tel.: 06151 / 360 82 72</pre></div></div></div><br>--<br>
<a href="mailto:Oberon@lists.inf.ethz.ch">Oberon@lists.inf.ethz.ch</a> mailing list for ETH Oberon and related systems<br>
<a href="https://lists.inf.ethz.ch/mailman/listinfo/oberon" rel="noreferrer" target="_blank">https://lists.inf.ethz.ch/<wbr>mailman/listinfo/oberon</a><br>
<br></blockquote></div><br></div>