<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class=""><span style="font-family: monospace; white-space: pre-wrap;" class="">Paul,</span></div><div class=""><font face="monospace" class=""><span style="white-space: pre-wrap;" class=""><br class=""></span></font></div><div class=""><font face="monospace" class=""><span style="white-space: pre-wrap;" class=""><br class=""></span></font></div><div class=""><font face="monospace" class=""><span style="white-space: pre-wrap;" class="">I have to disappoint you. I’m not engaging in a race to indiscriminately add new features to the Oberon system (that would be against the very spirit of Oberon, wouldn’t it?). Thinking about it though, I would probably recommend to refrain from adding a procedure MarkedViewerText() to module Oberon because it would either require module TextFrames to be imported in module Oberon (which however is the top module of the outer core and therefore is not supposed to contain TextFrames - wrong place!) or require placing MarkedViewerText within ORP itself, which in turn would trigger the import of modules Viewer and TextFrames. Not pretty either. The only remaining option then would be to create a new System.Compile command just for that one purpose (namely of accepting the “*” option) and move MarkedViewerText up to module System instead. </span></font><span style="font-family: monospace; white-space: pre-wrap;" class="">Three unappealing options!</span></div><div class=""><font face="monospace" class=""><span style="white-space: pre-wrap;" class=""><br class=""></span></font></div><div class=""><font face="monospace" class=""><span style="white-space: pre-wrap;" class=""><br class=""></span></font></div><div class=""><font face="monospace" class=""><span style="white-space: pre-wrap;" class="">But if one really *wanted* to add the “*” option, it would of course be straightforward:</span></font></div><div class=""><font face="monospace" class=""><span style="white-space: pre-wrap;" class=""><br class=""></span></font></div><div class=""><font face="monospace" class=""><span style="white-space: pre-wrap;" class=""><br class=""></span></font></div><div class=""><font face="monospace" class=""><span style="white-space: pre-wrap;" class="">  PROCEDURE MarkedViewerText* (): Texts.Text;</span></font></div><div class=""><font face="monospace" class=""><span style="white-space: pre-wrap;" class=""><br class="">    VAR V: Viewers.Viewer; T: Texts.Text;<br class=""><br class=""></span></font></div><div class=""><font face="monospace" class=""><span style="white-space: pre-wrap;" class="">  BEGIN V := Oberon.MarkedViewer();<br class=""><br class=""></span></font></div><div class=""><font face="monospace" class=""><span style="white-space: pre-wrap;" class="">    IF (V.dsc # NIL) & (V.dsc.next # NIL) & (V.dsc.next IS TextFrames.Frame) THEN T := V.dsc.next(TextFrames.Frame).text</span></font></div><div class=""><span style="white-space: pre-wrap; font-family: monospace;" class=""><br class=""></span></div><div class=""><span style="white-space: pre-wrap; font-family: monospace;" class="">    ELSE</span><span style="white-space: pre-wrap; font-family: monospace;" class=""> T := </span><span style="white-space: pre-wrap; font-family: monospace;" class="">NIL</span></div><div class=""><span style="white-space: pre-wrap; font-family: monospace;" class=""><br class=""></span></div><div class=""><span style="white-space: pre-wrap; font-family: monospace;" class="">    END</span><span style="white-space: pre-wrap; font-family: monospace;" class=""> ;</span></div><div class=""><font face="monospace" class=""><span style="white-space: pre-wrap;" class=""><br class=""></span></font></div><div class=""><font face="monospace" class=""><span style="white-space: pre-wrap;" class="">    RETURN T<br class=""><br class=""></span></font></div><div class=""><font face="monospace" class=""><span style="white-space: pre-wrap;" class="">  END MarkedViewerText;<br class=""></span><br class=""></font></div><div class=""><font face="monospace" class=""><br class=""></font></div><div class=""><font face="monospace" class="">and then in ORP.Compile:</font></div><div class=""><font face="monospace" class=""><br class=""></font></div><div class=""><font face="monospace" class=""><br class=""></font></div><div class=""><font face="monospace" class="">   ELSIF S.c = "*" THEN T := MarkedViewerText();</font></div><div class=""><span style="font-family: monospace;" class=""><br class=""></span></div><div class=""><span style="font-family: monospace;" class="">     IF</span><span style="font-family: monospace;" class=""> (T # </span><span style="font-family: monospace;" class="">NIL</span><span style="font-family: monospace;" class="">) & (T.len > 0) </span><span style="font-family: monospace;" class="">THEN</span><span style="font-family: monospace;" class=""> ORS.Init(T, 0); Module </span><span style="font-family: monospace;" class="">END</span></div><div class=""><font face="monospace" class="">      </font></div><div class=""><font face="monospace" class="">   END<br class=""><br class=""></font></div><div class=""><font face="monospace" class=""><br class=""></font></div><div class=""><font face="monospace" class="">Then one can first designate any (text) frame as operand by placing the star marker in it and activate the command ORP.Compile * . It does work. But does one need it?</font></div><div class=""><font face="monospace" class=""><br class=""></font></div><div class=""><font face="monospace" class=""><br class=""></font></div><div class=""><font face="monospace" class=""><span style="white-space: pre-wrap;" class="">Again, I would not recommend adding it. If someone finds an elegant solution to this, I’d reconsider. And if someone forced me to add it, I would probably go the route via a new command System.Compile and move MarkedViewerText up to module System (even though it does not belong there). This would keep both modules Oberon and ORP free of unwanted imports.</span></font></div><div class=""><font face="monospace" class=""><span style="white-space: pre-wrap;" class=""><br class=""></span></font></div><div class=""><font face="monospace" class=""><span style="white-space: pre-wrap;" class=""><br class=""></span></font></div><div class=""><font face="monospace" class=""><span style="white-space: pre-wrap;" class="">Andreas</span></font></div><div class=""><font face="monospace" class=""><span style="white-space: pre-wrap;" class=""><br class=""></span></font></div><div class=""><br class=""></div><div class=""><span style="font-family: monospace; white-space: pre-wrap;" class="">---------------------------------------- </span></div><font face="monospace" class=""><span style="white-space: pre-wrap;" class=""><br class=""></span></font><div class=""><span style="font-family: monospace; white-space: pre-wrap;" class=""><br class=""></span></div><div class=""><span style="font-family: monospace; white-space: pre-wrap;" class="">Paul Reed paulreed at <a href="http://paddedcell.com" class="">paddedcell.com</a> </span><font face="monospace" class=""><span style="white-space: pre-wrap;" class="">Tue Apr 25 16:16:14 CEST 2017</span></font></div><div class=""><span style="font-family: monospace; white-space: pre-wrap;" class=""><br class=""></span></div><div class=""><span style="font-family: monospace; white-space: pre-wrap;" class=""><br class=""></span></div><div class=""><span style="font-family: monospace; white-space: pre-wrap;" class="">Hi Tomas,</span></div><div class=""><div class=""><div class=""><font face="monospace" class=""><span style="white-space: pre-wrap;" class=""><br class=""></span></font></div><div class=""><span style="white-space: pre-wrap; font-family: monospace;" class=""><br class=""></span></div><div class=""><span style="white-space: pre-wrap; font-family: monospace;" class="">Not sure if useful, but is there a way to add * marked viewer as a </span><span style="white-space: pre-wrap; font-family: monospace;" class="">parameter to ORP?</span></div><div class=""><pre style="background-color: rgb(255, 255, 255);" class=""><span style="white-space: pre-wrap;" class=""><br class=""></span></pre><pre style="background-color: rgb(255, 255, 255);" class=""><span style="white-space: pre-wrap;" class="">><i class=""> ORP.Compile ~ is there
</i><br class=""></span></pre><pre style="background-color: rgb(255, 255, 255);" class=""><span style="white-space: pre-wrap;" class="">><i class=""> ORP.Compile ^ (make sense?)
</i><br class=""></span></pre><pre style="background-color: rgb(255, 255, 255);" class=""><span style="white-space: pre-wrap;" class="">><i class=""> ORP.Compile @ is there
</i><br class=""></span></pre><pre style="background-color: rgb(255, 255, 255);" class=""><span style="white-space: pre-wrap;" class="">><i class=""> ORP.Compile * to add
</i><br class=""></span></pre><pre style="background-color: rgb(255, 255, 255);" class=""><span style="white-space: pre-wrap;" class="">
I assume Prof. Wirth removed (or didn't add, he seems to write a lot of
his compilers freshly from scratch) the "marked viewer" version of the
compiler parameter handling because it removes the need for dependencies
on the imports Viewers and TextFrames (and the fiddly walk down the viewer
hierarchy to find the marked text).
<br class=""></span></pre><pre style="background-color: rgb(255, 255, 255);" class=""><span style="white-space: pre-wrap;" class="">
As an exercise you could add the feature back in to ORP.Mod if you wish,
by referring to the code in the original edition, in Compiler.Mod.
<br class=""></span></pre><pre style="background-color: rgb(255, 255, 255);" class=""><span style="white-space: pre-wrap;" class="">
(BTW you may notice that Edit.Locate has been changed too, to use the
FocusViewer instead of the MarkedViewer - though not for the same reason).
<br class=""></span></pre><pre style="background-color: rgb(255, 255, 255);" class=""><span style="white-space: pre-wrap;" class="">
It might perhaps have been better, in hindsight, if the Oberon module had
exported a function Oberon.MarkedViewerText().  No doubt Andreas has
already added it... ;-)
<br class=""></span></pre><pre style="background-color: rgb(255, 255, 255);" class=""><span style="white-space: pre-wrap;" class="">
HTH</span></pre><pre style="background-color: rgb(255, 255, 255);" class=""><span style="white-space: pre-wrap;" class="">
Paul
</span></pre><div class=""><br class=""></div></div></div></div></body></html>