[Oberon] Static variable overflow (bug?)

Chris Burrows chris at cfbsoftware.com
Mon Feb 24 02:15:56 CET 2020


If I were you I would have started by looking at the newer graphics examples
supplied with Project Oberon 2013 as a basis for porting the Fern example to
the newer system. The bitmap in the original XYPlane code appears to have
been used for dot-drawing optimisation that is no longer used (necessary?).

 

Regards,

Chris Burrows

CFB Software

https://www.astrobe.com

 

 

From: Oberon [mailto:oberon-bounces at lists.inf.ethz.ch] On Behalf Of Hans
Klaver
Sent: Monday, 24 February 2020 10:45 AM
To: ETH Oberon and related systems
Subject: [Oberon] Static variable overflow (bug?)

 

Recently I tried to implement XYplane.Mod from the book of Reiser & Wirth
'Programming in Oberon' for Project Oberon. Within Peter de Wachter's RISC
emulator I ran into an overflow problem (leading to the remaining empty of
the menu line of a viewer) that appears to be dependent on which disk image
is used.

 

Otherwise my port works fine (produces the IFS fractal fern as expected). 

For those interested I will post it to my github repository.

 

A minimal module that can reproduce this menu problem can be found below.

 

When starting the emulator in macOS as follows this problem occurs:

$ ./risc --fullscreen DiskImage/Oberon-2019-01-21.dsk

 

But the problem does NOT occur when starting thus: 

$ ./risc --fullscreen DiskImage/Oberon-2016-08-02.dsk

 

I do understand that there is a limit to the use of static variables within
the PO version of Oberon, but I would not expect this limit to be reached
this easily, and I would not expect it to appear in newer versions of the
software and not in older.

 

Does anyone have a clue where to look for the cause of this happening?

 

Hans Klaver

 

 

 

---------------------

 

MODULE MyViewer;  

(* Test of the menu line of a viewer *)

 

IMPORT Display, Viewers, Oberon, MenuViewers, TextFrames;

 

CONST 

   max = 16377;   (* If max >= 16367 the frame name disappears; If max >=
16377 the whole menu line disappears! *)

   menu = "System.Close System.Copy System.Grow"; 

 

TYPE 

   XYframe = POINTER TO XYframeDesc;

   XYframeDesc = RECORD (Display.FrameDesc) END;

 

VAR bitmap: ARRAY max OF SET;  (* with this variable present the menu may
remain empty! *)

 

 

PROCEDURE Restore(F: XYframe);

BEGIN 

   Oberon.RemoveMarks(F.X, F.Y, F.W, F.H);

   Display.ReplConst(Display.black, F.X, F.Y, F.W, F.H, Display.replace);
(* clear *)

END Restore;

 

 

PROCEDURE Handle(F: Display.Frame; VAR M: Display.FrameMsg);

   VAR F1: XYframe;

BEGIN  

   CASE F OF XYframe:

      CASE M OF 

         Oberon.InputMsg:

            IF M.id <http://M.id>  = Oberon.track THEN
Oberon.DrawMouseArrow(M.X, M.Y) END |

         Oberon.CopyMsg:

               Oberon.RemoveMarks(F.X, F.Y, F.W, F.H); NEW(F1); F1^ := F^;
M.F := F1 |

         MenuViewers.ModifyMsg:

            IF (M.Y # F.Y) OR (M.H # F.H) THEN F.Y := M.Y; F.H := M.H;
Restore(F) END        

      END

   END

END Handle;

 

 

PROCEDURE Open*;

   VAR F: XYframe;    V: Viewers.Viewer;   x, y: INTEGER;

BEGIN

   NEW(F);   F.handle := Handle; 

   Oberon.AllocateUserViewer(Oberon.Par.vwr.X, x, y); 

   V := MenuViewers.New(TextFrames.NewMenu("MyViewer", menu), F,
TextFrames.menuH, x, y)

END Open;

 

END MyViewer.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.inf.ethz.ch/pipermail/oberon/attachments/20200224/58a6ff8d/attachment.html>


More information about the Oberon mailing list